package cn.xiaobai.domain;

import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.util.StringUtils;
import lombok.Data;
import org.apache.logging.log4j.util.Strings;
import org.springframework.util.CollectionUtils;

import java.util.Map;
import java.util.Objects;

/**
 * redis 配置相关信息
 *
 * @Author yangdaji
 * @Date 2022/11/16 0016
 * @PackageName cn.xiaobai.domain
 * @ClassName RedisConfInfo
 */
@Data
public class RedisConfInfo {

    /**
     * redis ip
     */
    public static String host;

    /**
     * 端口号
     */
    public static Integer port;

    /**
     * 连接密码
     */
    public static String password;

    /**
     * 是否开启
     */
    public static Boolean enable = false;

    /**
     * 初始化 redis 相关连接配置
     *
     * @param jsonConfData
     */
    public static void initRedisConfInfo(String jsonConfData) {
        Map<String, String> jsonToMap = JSONUtil.toBean(jsonConfData, new TypeReference<Map<String, String>>() {
        }, true);
        // 获取 redis 信息
        String redisInfo = jsonToMap.get("redis");
        if (!StringUtils.isBlank(redisInfo)) {
            Map<String, String> redisJsonToMap = JSONUtil.toBean(redisInfo, new TypeReference<Map<String, String>>() {
            }, true);
            if (!CollectionUtils.isEmpty(redisJsonToMap)) {
                host = redisJsonToMap.get("host");
                password = redisJsonToMap.get("password");
                enable = Boolean.valueOf(redisJsonToMap.getOrDefault("enable", "false"));

                String portStr = redisJsonToMap.get("port");
                if (Strings.isNotBlank(portStr)) {
                    port = Integer.valueOf(portStr);
                }

            }
        }
        // 没有配置 redis信息时 返回空
    }

    /**
     * 判断是否可用
     *
     * @return
     */
    public static Boolean isUse() {
        return StringUtils.isNotBlank(host) &&
                Objects.nonNull(port) && enable;
    }
}
